package main

import (
	"fmt"
	"remoteGo/remote/hook"
	"remoteGo/remote/service"
)

var hookF0Id service.FuncID

func hookF0(c chan any, n int) {
	if hook.AfterGo(hookF0Id, c, n) {
		return
	}
	fmt.Println("hookF0")
	r := 0
	for i := 0; i < n; i++ {
		r += i
	}
	c <- r
}

func main() {
	if hook.BeforeMain() {
		return
	}
	c := make(chan any)
	//go func(c chan any, n int) {
	//	r := 0
	//	for i := 0; i < n; i++ {
	//		r += i
	//	}
	//	c <- r
	//}(c, 1000)
	go hookF0(c, 1000)
	fmt.Println(<-c)
}

func init() {
	hookF0Id = hook.Register(hookF0)
}

//type A struct {
//	A int
//	B int
//	C float32
//}
//
//var LEN int = 4
//
//func main() {
//	r, w := io.Pipe()
//	gob.Register(A{})
//	c := make(chan int)
//	go func() {
//		c <- func() int {
//			a := A{
//				A: 1,
//				B: 2,
//				C: 3.555,
//			}
//			buf := new(bytes.Buffer)
//			err := gob.NewEncoder(buf).Encode(a)
//			if err != nil {
//				fmt.Println(err)
//			}
//			bs := buf.Bytes()
//			for i := 0; i < len(bs); {
//				end := i + LEN
//				if end > len(bs) {
//					end = len(bs)
//				}
//				n, err := w.Write(bs[i : i+LEN])
//				if err != nil {
//					fmt.Println(err)
//				}
//				i += n
//			}
//			w.Write([]byte("asd"))
//			w.Close()
//			return 1
//		}()
//	}()
//	go func() {
//		d := gob.NewDecoder(r)
//		b := A{}
//		err := d.Decode(&b)
//		if err != nil {
//			fmt.Println(err)
//		}
//		fmt.Println(b)
//		bs, err := io.ReadAll(r)
//		fmt.Println(string(bs))
//	}()
//	time.Sleep(10 * time.Second)
//	//select {}
//}
